package entidades;

import javax.swing.JOptionPane;

public class ListaCircular extends Controlador{
    
    //imprimeElementos
    //verificaElemento
    
    private void iniciaListaCircular(Object elemento){
            primeira = new Celula();
            ultima = primeira;
            Celula novaCelula = new Celula();
            novaCelula.setElemento(elemento);
            novaCelula.setProximo(primeira);
            novaCelula.setAnterior(primeira);
            primeira.setProximo(novaCelula);
            primeira.setAnterior(novaCelula);
            ultima = novaCelula;
            tamanho++;
    }
    
    public void insereListaCircular(int posicao, Object elemento){
        if(tamanho == 0){
            iniciaListaCircular(elemento);
        }else{
            Celula novaCelula = new Celula();
            novaCelula.setElemento(elemento);
            Celula auxiliar = primeira;
            for (int i = 1; i <= tamanho; i++) {
                auxiliar = auxiliar.getProximo();
                if(posicao < tamanho){
                    if(posicao == i){
                        novaCelula.setAnterior(auxiliar.getAnterior());
                        novaCelula.setProximo(auxiliar);
                        auxiliar.getAnterior().setProximo(novaCelula);
                        auxiliar.setAnterior(novaCelula);
                        tamanho++;
                        break;
                    }
                }else if(posicao == tamanho){
                        novaCelula.setAnterior(auxiliar.getAnterior());
                        novaCelula.setProximo(auxiliar);
                        auxiliar.getAnterior().setProximo(novaCelula);
                        auxiliar.setAnterior(novaCelula);
                        tamanho++;
                        break;
                    }else if(posicao > tamanho){
                        novaCelula.setProximo(ultima.getProximo());
                        novaCelula.setAnterior(auxiliar);
                        ultima.setProximo(novaCelula);
                        ultima.getProximo().setAnterior(novaCelula);
                        ultima = novaCelula;
                        tamanho++;
                        break;
                    }
                }
            }
    }
    
    public void removeElementoListaCircular(int posicao){
        Celula auxiliar = primeira;
        if(tamanho == 0){
            JOptionPane.showMessageDialog(null, "Estrutura Vazia.");
        }else{
        for (int i = 1; i <= tamanho; i++) {
            auxiliar = auxiliar.getProximo();
                if(posicao == i){
                if(posicao < tamanho){
                    auxiliar.getProximo().setAnterior(auxiliar.getAnterior());
                    auxiliar.getAnterior().setProximo(auxiliar.getProximo());
                    auxiliar.setAnterior(null);
                    auxiliar.setProximo(null);
                    tamanho--;
                    break;
                }else if(posicao == tamanho){
                    auxiliar.getProximo().setAnterior(auxiliar.getAnterior());
                    auxiliar.getAnterior().setProximo(primeira.getProximo());
                    ultima = auxiliar.getAnterior();
                    auxiliar.setAnterior(null);
                    auxiliar.setProximo(null);
                    tamanho--;
                    break;
                }
                
            }if(posicao > tamanho){
                    JOptionPane.showMessageDialog(null, "Posição não existe.");
                    break;
                }
            JOptionPane.showMessageDialog(null, "Objeto removido com sucesso!");
        }
        }
        }
    
}//ListaCircular
